// stdx/macrosx.rs
// CRITICAL: 宏（macro_rules!, println!, format!）示例。
// AUTO_COMMENT: 展示宏的定义与常见用法。

#[allow(dead_code)]
pub fn stdx_examples_macrosx() {
    // CRITICAL: 自定义简单宏
    macro_rules! say_hello {
        () => {
            println!("hello macro")
        };
    }
    say_hello!();

    // CRITICAL: println! 与 format! 是常用宏
    let s = format!("number={}", 1);
    let _ = s;

    // CRITICAL: 带参数的宏
    macro_rules! add {
        ($a:expr, $b:expr) => {
            $a + $b
        };
    }
    let sum = add!(1, 2);

    // CRITICAL: 重复模式的宏
    macro_rules! vec_macro {
        ($($x:expr),*) => {
            {
                let mut v = Vec::new();
                $(v.push($x);)*
                v
            }
        };
    }
    let v = vec_macro![1, 2, 3];

    // CRITICAL: 条件宏
    macro_rules! debug_print {
        ($x:expr) => {
            #[cfg(debug_assertions)]
            println!("Debug: {}", $x);
        };
    }
    debug_print!("test");

    // CRITICAL: 内置宏
    let file = file!();
    let line = line!();
    let column = column!();

    let _ = (sum, v, file, line, column);
}
